Skip to content

Comments

Complexity of algorithms and tasks#2

Open
NicholayShestakov wants to merge 4 commits intomainfrom
complexity_of_algorithms_and_tasks
Open

Complexity of algorithms and tasks#2
NicholayShestakov wants to merge 4 commits intomainfrom
complexity_of_algorithms_and_tasks

Conversation

@NicholayShestakov
Copy link
Owner

Add

  • Bruteforce solution of arrangement of queens
  • Recursion solution of arrangement of queens
  • Fastest solution of arrangement of queens
  • File of complexities of all solutions

@@ -0,0 +1,29 @@
from itertools import combinations

if __name__ == "__main__":
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это лишнее. На крайний случай, нужно было релизовать основную функцию выше, а в "main" вызывать её.

Comment on lines +19 to +22
coord1[0] - coord1[1] == coord2[0] - coord2[1]
) # Проверка на одинаковую диагональ, параллельную главной
or (
sum(coord1) == sum(coord2)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это можно объединить в одно условие. Достаточно добавить модули

### Перебор:
Тут у нас сочетание из n в квадрате по n, умноженное на сочетание из n по 2. Равняется это всё, при некотором сокращении, чему-то типа (n^2)! / (2 * (n^2 - n)! * (n - 2)!). Дальше сокращать не вижу смысла, если можно с деланной уверенностью заявить, что сложность равна O((n^2)!). Она ведь равна этому? Или я не должен настооолько округлять? Если не должен, то наверное O((n^2)! / [(n^2 - n)! * n!]).
### Рекурсия:
На каждом уровне функции будет что-то по типу n на выбор ферзя * n на фильтрацию свободных полей. Уровней всего будет n штук в худшем случае. Получается O(n^3).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вы в цикле на каждом шаге вызываете рекурсивный вызов. И там тоже цикл. Так что нет, не $O(n^3)$ (кстати, в markdown поддерживается latex: $O(n^3)$)

@@ -0,0 +1,7 @@
# Оценка сложности:
### Перебор:
Тут у нас сочетание из n в квадрате по n, умноженное на сочетание из n по 2. Равняется это всё, при некотором сокращении, чему-то типа (n^2)! / (2 * (n^2 - n)! * (n - 2)!). Дальше сокращать не вижу смысла, если можно с деланной уверенностью заявить, что сложность равна O((n^2)!). Она ведь равна этому? Или я не должен настооолько округлять? Если не должен, то наверное O((n^2)! / [(n^2 - n)! * n!]).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вроде бы вы правы. Но тут можно было сыграть на том, что на одной строке должен быть ровно один ферзь. С этим знанием, можно достичь куда лучших результатов.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants